public class demo54 {
    class Solution {
        public int minSubArrayLen(int target, int[] nums) {
            int n = nums.length;
            int ans = n + 1;
            int sum = 0; // 子数组元素和
            int left = 0; // 子数组左端点
            for (int right = 0; right < n; right++) { // 枚举子数组右端点
                sum += nums[right];
                while (sum - nums[left] >= target) { // 尽量缩小子数组长度
                    sum -= nums[left++]; // 左端点右移
                }
                if (sum >= target) {
                    ans = Math.min(ans, right - left + 1);
                }
            }
            return ans <= n ? ans : 0;
        }
    }

}
